package state_pattern.concrete;

import state_pattern.Role;
import state_pattern.State;

/**
 * @author 申书航
 * @version 1.0
 * 行走状态类，表示角色在行走状态下的行为和状态转移
 */
public class WalkState extends State {

    /**
     * 构造方法，初始化行走状态
     * @param role 角色实例
     */
    public WalkState(Role role) {
        super(role);
    }

    @Override
    public void onEnter() {
        // 当角色进入行走状态时的操作
        System.out.println(role.getName() + "进入了行走状态");
    }

    @Override
    public void execute() {
        // 执行角色的行走逻辑
        if (role.getCurrPos() < role.getTargetPos()) {
            role.setCurrPos(role.getCurrPos() + role.getSpeed());
            if (role.getCurrPos() > role.getTargetPos()) {
                role.setCurrPos(role.getTargetPos());
            }
            System.out.println(role.getName() + "距离战场还有" + (role.getTargetPos() - role.getCurrPos()) + "m");
        }
        if (role.getCurrPos() == role.getTargetPos()) {
            // 当角色到达目标位置时状态转移
            System.out.println(role.getName() + "到达了战场");
            role.changeState(new StandState(role));
        }
    }
}
